package com.lei.synchronized_upgrade.biaslock;

/**
 * @Author: Doream
 * @Date: 2022/3/19 9:12
 */

import com.lei.synchronized_upgrade.annotation.Info;
import org.openjdk.jol.info.ClassLayout;

/**
 * 偏向锁Demo
 * 记录线程id和偏向锁状态
 * 下次线程进入相同锁中并不会触发释放锁、抢占锁等额外操作
 * -XX:BiasedLockingStartupDelay=0 参数可关闭偏向锁延迟，-XX:-UseBiasedLocking=false 关闭偏向锁
 *
 * 偏向锁的撤销：
 * 1. 多个线程进行竞争(偏向锁适用于只有1个线程抢占资源时)
 * 2. 偏向锁的撤销动作必须等待全局安全点
 * 3. 暂停拥有偏向锁的线程，判断锁对象是否处于被锁定状态
 * 4. 撤销偏向锁，恢复到无锁(01)或轻量级锁(00)的状态
 *
 * 好处：
 * 1. 可以提高带有同步但无竞争的程序性能
 */
@Info("单个线程，偏向锁转换学习")
public class Demo01 {
    public static void main(String[] args) {
        MyThread m1 = new MyThread();
        m1.start();
    }

}
class MyThread extends Thread {
    static Object obj = new Object();
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            synchronized (obj){
                System.out.println(ClassLayout.parseInstance(obj).toPrintable());
            }
        }
    }
}